package com.apartment.own.domain;

import java.math.BigDecimal;
import java.util.Date;
import java.util.List;

import com.apartment.common.core.domain.BaseEntity;
import com.apartment.own.domain.group.InsertResourceMode;
import com.baomidou.mybatisplus.annotation.TableField;
import com.baomidou.mybatisplus.annotation.TableLogic;
import com.fasterxml.jackson.annotation.JsonFormat;
import com.apartment.common.annotation.Excel;
import com.fasterxml.jackson.annotation.JsonIgnore;
import lombok.Data;
import io.swagger.annotations.ApiModel;
import io.swagger.annotations.ApiModelProperty;
import org.apache.commons.lang3.builder.ToStringBuilder;
import org.apache.commons.lang3.builder.ToStringStyle;

import javax.validation.constraints.NotNull;

/**
 * 合同 ???零散期前后置什么意思   ???租金分界怎么分界 ???免租期怎么免租对象 own_res_house_contract
 * 
 * @author @Dog_E
 * @date 2020-08-28
 */
@Data
@ApiModel("合同 ???零散期前后置什么意思   ???租金分界怎么分界 ???免租期怎么免租")
public class OwnResHouseContract extends BaseEntity
{
    private static final long serialVersionUID = 1L;

    /** ID */
    @ApiModelProperty("ID")
    private String id;

    /** 删除标志（0代表存在 2代表删除） */
    @ApiModelProperty("删除标志（0代表存在 2代表删除）")
    @JsonIgnore
    @TableLogic
    private String delFlag;

    /** 房源的id */
    @ApiModelProperty("房源的id")
    @Excel(name = "房源的id")
    private String keyHouseResourceId;

    /** 手机号区号字典 */
    @ApiModelProperty("手机号区号字典")
    @Excel(name = "手机号区号字典")
    @NotNull(message = "参数不正确",groups = {InsertResourceMode.class})
    private Long areaCode;

    /** 手机号 */
    @ApiModelProperty("手机号")
    @Excel(name = "手机号")
    @NotNull(message = "参数不正确",groups = {InsertResourceMode.class})
    private String tel;

    /** 姓名 */
    @ApiModelProperty("姓名")
    @Excel(name = "姓名")
    @NotNull(message = "参数不正确",groups = {InsertResourceMode.class})
    private String name;

    /** 证件类型 */
    @ApiModelProperty("证件类型")
    @Excel(name = "证件类型")
    @NotNull(message = "参数不正确",groups = {InsertResourceMode.class})
    private String idType;

    /** 证件号 */
    @ApiModelProperty("证件号")
    @Excel(name = "证件号")
    @NotNull(message = "参数不正确",groups = {InsertResourceMode.class})
    private String idCard;

    /** 收款人 */
    @ApiModelProperty("收款人")
    @Excel(name = "收款人")
    private String payee;

    /** 银行类型 */
    @ApiModelProperty("银行类型")
    @Excel(name = "银行类型")
    private Long bankType;

    /** 银行卡号 */
    @ApiModelProperty("银行卡号")
    @Excel(name = "银行卡号")
    private String bankCardId;

    /** 银行支行 */
    @ApiModelProperty("银行支行")
    @Excel(name = "银行支行")
    private String bankBranch;

    /** 起租时间 */
    @ApiModelProperty("起租时间")
    @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss")
    @Excel(name = "起租时间", width = 30, dateFormat = "yyyy-MM-dd HH:mm:ss")
    @NotNull(message = "参数不正确",groups = {InsertResourceMode.class})
    private Date leaseStartTime;

    /** 退租时间 */
    @ApiModelProperty("退租时间")
    @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss")
    @Excel(name = "退租时间", width = 30, dateFormat = "yyyy-MM-dd HH:mm:ss")
    @NotNull(message = "参数不正确",groups = {InsertResourceMode.class})
    private Date leaseEndTime;

    /** 租期 这个时间最好以天或者小时为单位 大概率用天  */
    @ApiModelProperty("租期 这个值不用传")
    @Excel(name = "租期 这个时间最好以天或者小时为单位 大概率用天 ")
    private Integer tenancy;

    /** 租金缴费 几月付一次 */
    @ApiModelProperty("租金缴费 几月付一次")
    @Excel(name = "租金缴费 几月付一次")
    @NotNull(message = "参数不正确",groups = {InsertResourceMode.class})
    private Long leasePaymentType;

    /** 一次付多少钱 */
    @ApiModelProperty("一次付多少钱")
    @Excel(name = "一次付多少钱")
    @NotNull(message = "参数不正确",groups = {InsertResourceMode.class})
    private BigDecimal accountPayable;

    /** 租金层级:枚举  按比例增加还是按金额增加 */
    @ApiModelProperty("租金层级:枚举  按比例增加还是按金额增加")
    @Excel(name = "租金层级:枚举  按比例增加还是按金额增加")
    @NotNull(message = "参数不正确",groups = {InsertResourceMode.class})
    private Long hierarchy;

    /** 每年递增的值 */
    @ApiModelProperty("每年递增的值")
    @Excel(name = "每年递增的值")
    private BigDecimal hierarchyValue;

    /** 这个值是免除几次租金  这个字段根据  lease_payment_type 和 account_payable计算 */
    @ApiModelProperty("这个值是免除几次租金  这个字段根据  lease_payment_type 和 account_payable计算")
    @Excel(name = "这个值是免除几次租金  这个字段根据  lease_payment_type 和 account_payable计算")
    @NotNull(message = "参数不正确",groups = {InsertResourceMode.class})
    private Long rentFree;

    /** 支付时间偏移方式 ,使用枚举 */
    @ApiModelProperty("支付时间偏移方式 ,使用枚举")
    @Excel(name = "支付时间偏移方式 ,使用枚举")
    @NotNull(message = "参数不正确",groups = {InsertResourceMode.class})
    private Long payTime;

    /** 支付时间偏移方式的值 */
    @ApiModelProperty("支付时间偏移方式的值")
    @Excel(name = "支付时间偏移方式的值")
    @NotNull(message = "参数不正确",groups = {InsertResourceMode.class})
    private Integer payTimeValue;

    /** 是否开启了零散期 */
    @ApiModelProperty("是否开启了零散期")
    @Excel(name = "是否开启了零散期")
    @NotNull(message = "参数不正确",groups = {InsertResourceMode.class})
    private Integer isScattered;

    /** 开始时间 */
    @ApiModelProperty("开始时间")
    @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss")
    @Excel(name = "开始时间", width = 30, dateFormat = "yyyy-MM-dd HH:mm:ss")
    @NotNull(message = "参数不正确",groups = {InsertResourceMode.class})
    private Date beginStartTime;

    /** 截至时间 */
    @ApiModelProperty("截至时间")
    @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss")
    @Excel(name = "截至时间", width = 30, dateFormat = "yyyy-MM-dd HH:mm:ss")
    @NotNull(message = "参数不正确",groups = {InsertResourceMode.class})
    private Date beginEndTime;

    /** 金额 */
    @ApiModelProperty("金额")
    @Excel(name = "金额")
    @NotNull(message = "参数不正确",groups = {InsertResourceMode.class})
    private BigDecimal beginAmount;

    /** 开始时间 */
    @ApiModelProperty("开始时间")
    @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss")
    @Excel(name = "开始时间", width = 30, dateFormat = "yyyy-MM-dd HH:mm:ss")
    @NotNull(message = "参数不正确",groups = {InsertResourceMode.class})
    private Date endStartTime;

    /** 截至时间 */
    @ApiModelProperty("截至时间")
    @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss")
    @Excel(name = "截至时间", width = 30, dateFormat = "yyyy-MM-dd HH:mm:ss")
    @NotNull(message = "参数不正确",groups = {InsertResourceMode.class})
    private Date endEndTime;

    /** 金额 */
    @ApiModelProperty("金额")
    @Excel(name = "金额")
    @NotNull(message = "参数不正确",groups = {InsertResourceMode.class})
    private BigDecimal endAmount;

    /** 合同类型,新签,续租,转租,换房 字典 */
    @ApiModelProperty("合同类型,新签,续租,转租,换房 字典")
    @Excel(name = "合同类型,新签,续租,转租,换房 字典")
    @NotNull(message = "参数不正确",groups = {InsertResourceMode.class})
    private String constraintType;

    /** 合同的图片 字符串分割 */
    @ApiModelProperty("合同的图片 字符串分割")
    @Excel(name = "合同的图片 字符串分割")
    private String constraintImages;

    /** 合同附件 字符串分割 */
    @ApiModelProperty("合同附件 字符串分割")
    @Excel(name = "合同附件 字符串分割")
    private String certificate;

    /** 合同备注 */
    @ApiModelProperty("合同备注")
    @Excel(name = "合同备注")
    private String constraintComment;

    /** 签约这个合同的员工 */
    @ApiModelProperty("签约这个合同的员工")
    @Excel(name = "签约这个合同的员工")
    private String contractEmployees;

    /** 合同编号 */
    @ApiModelProperty("合同编号")
    @Excel(name = "合同编号")
    private String constraintNo;

    /** 签约时间 */
    @ApiModelProperty("签约时间")
    @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss")
    @Excel(name = "签约时间", width = 30, dateFormat = "yyyy-MM-dd HH:mm:ss")
    @NotNull(message = "参数不正确",groups = {InsertResourceMode.class})
    private Date constraintTime;

    /* 关系 */



    /** 额外费用 */
    @ApiModelProperty("额外费用列表")
    @TableField(exist = false)
    @NotNull(message = "参数不正确",groups = {InsertResourceMode.class})
    List<OwnOrdExtraCharge> ownOrdExtraChargeList;

    /** 押金 */
    @ApiModelProperty("押金费用表")
    @TableField(exist = false)
    @NotNull(message = "参数不正确",groups = {InsertResourceMode.class})
    List<OwnOrdCashPledge> ownOrdCashPledgeList;
}
